Leszek FrÄ…Å›
Wprowadzenie:
1) Co to jest uczenie maszynowe
1.1) Dlaczego warto korzystać z uczenia maszynowego
2)Przykładowe zastosowania
3) Rodzaje systemów uczenia maszynowego
4) Uczenie z modelu
5) Główne Problemy Uczenia maszynowego
,,...Uczenie maszynowe to dziedzina nauki dająca komputerom możliwość uczenia się bez konieczności ich jawnego programowania..." Arthur Samuel, 1959
a bardziej technicznie:
Mówimy ze program komputerowy uczy się na podstawie doświadczenia E w odniesieniu do jakiegoś zadania T i pewnej miary wydajności P, jeśli jego wydajność (mierzona przez P) wobec zadania T wzrasta z nabywaniem doświadczenia E. Tom Mitchell, 1997,
Zadanie: napisać filtr spamu, przy pomocy tradydycyjnych technik programistycznych
1) Zastanowienie jak wygląda klsyczny spam - powtarzające się wyrażenia: okazja, darmowe, bonus, promocja, gratis, bez limitów. Występowanie: temat wiadomości
2) Napisanie algorytmu wykrywającego każdy z zaobserwowanych szablonów. Program oznaczałby wiadomość jako spam, jeśli wykryłby jeden z kilku określonych wzorców.
3) Testowanie programu, ciągłe powtarzanie kroków 1) i 2)
=> a co jeśli spamerzy zauważyli by blokowanie algorytmu wykrywającego nieporządane mejle?
Próby omijania filtrów: wkomponowywanie białych znaków, znaków specjalnych
=> należy nom stop uwzględniać nowe zmiany poprzez dopisywanie nowych reguł...
Najlepsze rozwiÄ…zanie?
Stworzenie samouczącego się algorytmu, na podstawie przykładów i kombinacji z nim związanych
Wykorzystanie technik uczenia maszynowego do analizowania olbrzymich ilości danych może pomóc w wykrywaniem nieoczywistych wzorców. Proces nazywa się wydobywaniem danych (data minig)
Uczenie maszynowe nadaje siÄ™ do:
1) problemów, które wymagają częstego dsotrajania algorytmu lub korzystania z długih list reguł
2) złożonych problemów, trudnych do rozwiązania tradycyjnymi metodami
3) zmiennych środowisk wpływających na problematykę
4) pomagania człowiekowu w analizowaniu skomplikowanych zagadnień i olbrzymich ilości danych
=> dane są oznakowane, jest zbiór uczący oraz zbiór weryfikacyjny
metoda k-najbliższych sąsiadów
regresja liniowa
regresja logistyczna
Maszyna wektorów nośnych
drzewa decyzyjne i losowe lasy
sieci neuronowe
=> dane uczÄ…ce sÄ… nieoznakowane. Program uczy siÄ™ bez nauczyciela
metoda k-średnich lub centroidów (k-means)
hierarchiczna analiza skupień (hierarchical cluster analysis, HCA)
Wykrywawenie anomali i nowości (anomaly detection and novelety detection)
wizualiacja i redukcje wymiarowości
Dobry przykładem jest analiza skupień...
źródło: Uczenie maszynowe z użyciem Scikit-Learn i Tensorflow, Aureilen Geron, 2020, Gliwice
lub wykrywanie anomalii:
źródło: Uczenie maszynowe z użyciem Scikit-Learn i Tensorflow, Aureilen Geron, 2020, Gliwice
Oczywiście jest wiele innych rodzajów ,,uczenia" maszynowego:
System uczącyc (zwany agentem) obserwuje środowisko i na tej podstawie wykonuje pewne czynności, a take odbiera nagrody lub kary
źródło: Uczenie maszynowe z użyciem Scikit-Learn i Tensorflow, Aureilen Geron, 2020, Gliwice
Uczenie wsadowe:
Do nauko rozpoznawanie (klasyfikacji) wykorzystywane są wszystkie dostępne dane. System nie jest w stanie trenować przyrostowo, do jego nauki poświęca się dużej ilości czasu i zasobów.
Uczenie przyrostowe:
System jest trenowanyna bieżąco poprzez sekwencyjnie dostarczane dane, któremogą być pojedyncze lub przyjmować postać minipakietów (niewielkich zbiorów)
Załóżmy, że pieniądze dają szczęście...
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model
oecd_bli = pd.read_csv("oecd_bli_2015.csv", thousands=',')
oecd_bli = oecd_bli[oecd_bli["INEQUALITY"]=="TOT"]
oecd_bli = oecd_bli.pivot(index="Country", columns="Indicator", values="Value")
oecd_bli.head(5)
oecd_bli.rename(columns={"Life satisfaction": "Satysfakcja z życia"}, inplace=True)
oecd_bli["Satysfakcja z życia"].head()
gdp_per_capita = pd.read_csv("gdp_per_capita.csv", thousands=',', delimiter='\t',
encoding='latin1', na_values="n/a")
gdp_per_capita.rename(columns={"2015": "PKB per capita"}, inplace=True)
gdp_per_capita.set_index("Country", inplace=True)
gdp_per_capita.head(2)
full_country_stats = pd.merge(left=oecd_bli, right=gdp_per_capita, left_index=True, right_index=True)
full_country_stats.sort_values(by="PKB per capita", inplace=True)
full_country_stats
full_country_stats[["PKB per capita", 'Satysfakcja z życia']].loc["United States"]
remove_indices = [0, 1, 6, 8, 33, 34, 35]
keep_indices = list(set(range(36)) - set(remove_indices))
sample_data = full_country_stats[["PKB per capita", 'Satysfakcja z życia']].iloc[keep_indices]
missing_data = full_country_stats[["PKB per capita", 'Satysfakcja z życia']].iloc[remove_indices]
sample_data.plot(kind='scatter', x="PKB per capita", y='Satysfakcja z życia', figsize=(5,3))
plt.axis([0, 60000, 0, 10])
position_text = {
"Hungary": (5000, 1),
"Korea": (18000, 1.7),
"France": (29000, 2.4),
"Australia": (40000, 3.0),
"United States": (52000, 3.8),
}
for country, pos_text in position_text.items():
pos_data_x, pos_data_y = sample_data.loc[country]
country = "USA" if country == "United States" else country
country = "Węgry" if country == "Hungary" else country
country = "Francja" if country == "France" else country
plt.annotate(country, xy=(pos_data_x, pos_data_y), xytext=pos_text,
arrowprops=dict(facecolor='black', width=0.5, shrink=0.1, headwidth=5))
plt.plot(pos_data_x, pos_data_y, "ro")
plt.xlabel("PKB per capita (dolary)")
#save_fig('r_1_17')
plt.show()
Czy ta zależność układa się podług linii prostej?
Ale jak te współczynniki dobrać?
Uczenie i uruchamianie modelu liniowego za pomocÄ… biblioteki Scikit-Learn:
def prepare_country_stats(oecd_bli, gdp_per_capita):
oecd_bli = oecd_bli[oecd_bli["INEQUALITY"]=="TOT"]
oecd_bli = oecd_bli.pivot(index="Country", columns="Indicator", values="Value")
gdp_per_capita.rename(columns={"2015": "GDP per capita"}, inplace=True)
gdp_per_capita.set_index("Country", inplace=True)
full_country_stats = pd.merge(left=oecd_bli, right=gdp_per_capita,
left_index=True, right_index=True)
full_country_stats.sort_values(by="GDP per capita", inplace=True)
remove_indices = [0, 1, 6, 8, 33, 34, 35]
keep_indices = list(set(range(36)) - set(remove_indices))
return full_country_stats[["GDP per capita", 'Life satisfaction']].iloc[keep_indices]
# Importujemy moduły:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model
# Wczytuje dane
oecd_bli = pd.read_csv("oecd_bli_2015.csv", thousands=',')
gdp_per_capita = pd.read_csv("gdp_per_capita.csv",thousands=',',delimiter='\t',
encoding='latin1', na_values="n/a")
# Przygotowuje dane
country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)
X = np.c_[country_stats["GDP per capita"]]
y = np.c_[country_stats["Life satisfaction"]]
country_stats.rename(columns={"GDP per capita": "PKB per capita"}, inplace=True)
country_stats.rename(columns={"Life satisfaction": "Satysfakcja z życia"}, inplace=True)
# Wizualizuje dane
country_stats.plot(kind='scatter', x="PKB per capita", y='Satysfakcja z życia')
plt.show()
# Wybiera model liniowy
model = sklearn.linear_model.LinearRegression()
# Uczy dane
model.fit(X, y)
# Oblicza prognozy dla Cypru
X_new = [[22587]] # PKB per capita Cypru
print(model.predict(X_new))
from sklearn import linear_model
lin1 = linear_model.LinearRegression()
Xsample = np.c_[sample_data["PKB per capita"]]
ysample = np.c_[sample_data["Satysfakcja z życia"]]
lin1.fit(Xsample, ysample)
t0, t1 = lin1.intercept_[0], lin1.coef_[0][0]
t0, t1
sample_data.plot(kind='scatter', x="PKB per capita", y='Satysfakcja z życia', figsize=(5,3))
plt.xlabel("PKB per capita (dolary)")
plt.axis([0, 60000, 0, 10])
X=np.linspace(0, 60000, 1000)
plt.plot(X, t0 + t1*X, "b")
plt.text(5000, 3.1, r"$\theta_0 = 4.85$", fontsize=14, color="b")
plt.text(5000, 2.2, r"$\theta_1 = 4.91 \times 10^{-5}$", fontsize=14, color="b")
#save_fig('r_1_19')
plt.show()
print("t1 = ", t1)
print("t0 = ", t0)
Problem uczenia: ,,zły algorytm" lub ,,złe dane". Przykładem może być kompromis pomiędzy wkładanym wysiłmiem w rozwój algorytmów, a stworzenie zbiorów danych (korpusy językowe: ,,buk", ,,Bug", ,,Bóg", ,,Buk")
Aby algorytmy uczenia maszynowego działały poprawnie, niezbędne jest zapewnienie mnóstwa danych. Algorytmy związane z przetwarzaniem tekstu
Aby proces trenowania modelu przebigał skutecznie, dane muszą być dobrane w sposób adekwatny aby "generalizacja" jaka zostanie wykonana przez algorytm nie odbiegała od modelu
dane związane z krajami,pkb nie był doskonale reprezentatywny dla modelu liniowego, brakuje w nim kilku państw. Model wyuczonym przy pomocy dodanych nowych państw: linia ciągła, Stary model: linia przerywana
jeśli niektóre elementy wyraźnie odstają od reszty przykładów, wystarczy je odrzucić
jeśli miektórym przykładom brakuje kilku cech, ( np klient nie podał wieku), należy zadecydować czy wytrenować wskazaując w tę lukę wartość średnią, wytrenować model z tą wartością, a drugi bez niej.
nadmierna generalizacja lub też przetrenowanie lub nadmierne dopasowanie
Model dobrze sprawdza się dla danych uczących, ale sam proces uogólniania nie sprawuje się zbyt dobrze